package demo9;

import java.util.LinkedList;
import java.util.Queue;

//两个队列实现栈
public class QueueStack {
    public Queue<Integer> qu1;
    public Queue<Integer> qu2;
    public QueueStack(){
        qu1=new LinkedList<>();
        qu2=new LinkedList<>();
    }
    //元素入队列
    public void push(int k){
        if(!qu1.isEmpty()){
            qu1.offer(k);
        }else if(!qu2.isEmpty()){
            qu2.offer(k);
        }else {
            qu1.offer(k);
        }
    }
    //判两个队列空
    public boolean empty(){
        return qu1.isEmpty()&&qu2.isEmpty();
    }
    //队列模拟出栈
    public int pop(){
        if(empty()){
            System.out.println("栈为空！！！！");
            throw new RuntimeException("栈空");
        }
        if(!qu1.isEmpty()){     //判断是谁先存了序列
            int size=qu1.size();
            for(int i=0;i<size-1;i++){
                qu2.offer(qu1.poll());
            }
            return qu1.poll();//弹出qu1的最后一个元素对应着栈顶元素
        }else{
            int size=qu2.size();
            for(int i=0;i<size-1;i++){
                qu1.offer(qu2.poll());
            }
            return qu2.poll();//弹出qu2的最后一个元素对应着栈顶元素
        }
    }
    //获取栈顶元素
    public int top(){
        if(empty()){
            System.out.println("栈为空！！！");
            throw new RuntimeException("栈为空");
        }
        if(!qu1.isEmpty()){
            int size=qu1.size();
            int val=0;
            for(int i=0;i<size;i++){
                val= qu1.poll();//出列
                qu2.offer(val);//入列
            }
            return val;//找到栈顶元素，但并不删除
        }
        else{
            int size=qu2.size();
            int val=0;
            for(int i=0;i<size;i++){
                val= qu2.poll();//出列
                qu1.offer(val);//入另一列
            }
            return val;//找到栈顶元素，但并不删除
        }
    }
    public void display(Queue<Integer> qu ){
        int size=qu.size();
        for(int i=0;i<size;i++){
            System.out.print(qu.poll()+" ");
        }
        System.out.println();
    }
}
